package com.yunpeng.aidevice.dao.service;

import com.yunpeng.aidevice.common.dto.save.DeviceSaveDTO;
import com.yunpeng.aidevice.dao.model.MerchantCountDO;
import com.yunpeng.aidevice.dao.model.entity.DeviceDO;
import com.yunpeng.aidevice.dao.model.record.RecordDO;

import java.util.List;

/**
 * IDeviceService
 *
 * @author : Moore(hemw)
 * @date : 2020-04-27
 */
public interface IDeviceService {
    /**
     * 新增设备
     *
     * @param deviceSaveDTO 设备信息
     * @param operatorCode  操作人代码
     * @return
     */
    Boolean addNew(DeviceSaveDTO deviceSaveDTO, String operatorCode);

    /**
     * 更新设备信息
     *
     * @param deviceSaveDTO 设备信息
     * @param operatorCode  操作人代码
     * @return
     */
    Boolean updateDevice(DeviceSaveDTO deviceSaveDTO, String operatorCode);

    /**
     * 禁用启用设备
     *
     * @param disable      是否禁用
     * @param deviceCode   设备代码
     * @param operatorCode 操作人代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Boolean enableDisableDevice(Boolean disable, String deviceCode, String operatorCode, String merchantCode, String tenantCode);

    /**
     * 删除设备
     *
     * @param deviceCode   设备代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Boolean deleteDevice(String deviceCode, String merchantCode, String tenantCode);

    /**
     * 获取设备对象
     *
     * @param deviceCode   设备代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    DeviceDO getByCode(String deviceCode, String merchantCode, String tenantCode);

    /**
     * 统计商户设备数量
     *
     * @param merchantCodes
     * @param tenantCode
     * @param state
     * @return
     */
    List<MerchantCountDO> countByMerchant(List<String> merchantCodes, String tenantCode, String state);

    /**
     * 获取商户设备列表（最大2000）
     *
     * @param merchantCode
     * @param tenantCode
     * @return
     */
    List<DeviceDO> getByMerchant(String merchantCode, String tenantCode);

    /**
     * 根据设备标识获取对象
     *
     * @param deviceId
     * @return
     */
    DeviceDO getByDeviceId(String deviceId);

    /**
         * 保存上传记录
         *
         * @param recordDO
         * @return
         */
    Boolean addRecord(RecordDO recordDO);
}
